package flow

import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.runBlocking


suspend fun requestFlow(i: Int): Flow<String> = flow {
    emit("$i, first")
    delay(300)
    emit("$i, second")
}

fun main(args: Array<String>) {
    runBlocking {
        // 展开流，场景是 一个值 对应 一个 值序列（列表）。
        // flatMapConcat 顺序 展开（铺开）
        // flatMapMerge 并发执行 请求流，收集
        // flatMapLatest 下一个 请求流，会取消上一个
        (1..3).asFlow().flatMapLatest {
            requestFlow(it)
        }.collect {
            println(it)
        }
        coroutineContext[Job]
    }
}